package pagecode;

import java.util.ArrayList;
import java.util.List;

import service.CaracteristicaService;
import service.IteracaoService;
import service.ProjetoService;
import beans.Caracteristica;
import beans.Iteracao;
import beans.IteracaoPK;
import beans.Projeto;
import beans.TipoCaracteristica;

@SuppressWarnings("unchecked")
public class CaracteristicaEdit extends PaginaBase {
	
	private Iteracao iteracao;
	
	private Projeto projeto;
	
	private List<CampoCaracteristica> listaCaracteristicas;
	
	private Integer iterNumero;
	
	private Integer idQualidade;
	
	public CaracteristicaEdit()
	{
		try
		{
			projeto = new ProjetoService().buscarProjetoPorId(session.getAttribute("idProjeto").toString());
			iterNumero = (Integer)session.getAttribute("iterNumero");
			IteracaoPK iteracaoPK = new IteracaoPK();
			iteracaoPK.setIdProjeto(projeto.getIdProjeto());
			iteracaoPK.setIterNumero(iterNumero);
			iteracao = new IteracaoService().buscarIteracaoPorIteracaoPK(iteracaoPK);
			listaCaracteristicas = (List<CampoCaracteristica>)session.getAttribute("listaCaracteristicas");
			if(listaCaracteristicas == null)
			{
				listaCaracteristicas = new ArrayList<CampoCaracteristica>();
				CaracteristicaService caracteristicaService = new CaracteristicaService();
				List<TipoCaracteristica> caracteristicas = caracteristicaService.buscarTiposCaracteristicaPorIdQualidade((Integer)session.getAttribute("tipoQualidade"));
				for(TipoCaracteristica tipoCaracteristica:caracteristicas)
				{
					CampoCaracteristica campo = new CampoCaracteristica();
					Caracteristica caracteristica = caracteristicaService.buscarCaracteristicaPorIteracaoTipo(iteracao,tipoCaracteristica);
					if(caracteristica == null)
					{
						campo.setAtivo(false);
					}
					else
					{
						campo.setAtivo(true);
						campo.setPeso(caracteristica.getPeso());
						campo.setPontuacaoEsperada(caracteristica.getPontuacaoEsperada());
					}
					campo.setTipoCaracteristica(tipoCaracteristica);
					campo.setNome(tipoCaracteristica.getNome());
					listaCaracteristicas.add(campo);
				}
			}
			session.setAttribute("listaCaracteristicas", listaCaracteristicas);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	public String salvar()
	{
		int total = 0;
		for(CampoCaracteristica campo:listaCaracteristicas)
		{
			if(campo.isAtivo())
			{
				total = total + campo.getPeso();
			}
		}
		if(total != 10)
		{
			addErrorMsg("A soma dos pesos deve ser igual a 10.");
			return "";
		}
		try
		{
			CaracteristicaService caracteristicaService = new CaracteristicaService();
			for(CampoCaracteristica campo:listaCaracteristicas)
			{
				Caracteristica caracteristica = caracteristicaService.buscarCaracteristicaPorIteracaoTipo(iteracao,campo.getTipoCaracteristica());
				if(campo.isAtivo())
				{
					if(caracteristica == null)
					{
						caracteristica = new Caracteristica();
						caracteristica.setIteracao(iteracao);
						caracteristica.setTipoCaracteristica(campo.getTipoCaracteristica());
					}
					caracteristica.setPeso(campo.getPeso());
					caracteristica.setPontuacaoEsperada(campo.getPontuacaoEsperada());
					try
					{
						caracteristicaService.salvarCaracteristica(caracteristica);
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
				}
				else if(caracteristica != null)
				{
					caracteristicaService.excluirCaracteristica(caracteristica);
				}
			}
		}
		catch(Exception e)
		{
			
		}
		session.removeAttribute("listaCaracteristicas");
		return "subcaracteristicaEdit";
	}

	public String voltarQualidadeSelect()
	{
		return "qualidadeSelect";
	}

	public String voltarIteracaoEdit()
	{
		return "iteracaoEdit";
	}
	
	public String voltarListaProjetos()
	{
		session.removeAttribute("idProjeto");
		return "listaProjetos";
	}

	public String voltarProjetoEdit()
	{
		return "projetoEdit";
	}

	public String voltarListIteracao()
	{
		return "listaIteracao";
	}

	public Iteracao getIteracao() {
		return iteracao;
	}

	public void setIteracao(Iteracao iteracao) {
		this.iteracao = iteracao;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	public Integer getIdQualidade() {
		return idQualidade;
	}

	public void setIdQualidade(Integer idQualidade) {
		this.idQualidade = idQualidade;
	}

	public Integer getIterNumero() {
		return iterNumero;
	}

	public void setIterNumero(Integer iterNumero) {
		this.iterNumero = iterNumero;
	}

	public List<CampoCaracteristica> getListaCaracteristicas() {
		return listaCaracteristicas;
	}

	public void setListaCaracteristicas(
			List<CampoCaracteristica> listaCaracteristicas) {
		this.listaCaracteristicas = listaCaracteristicas;
	}

	public String getNomeQualidade()
	{
		return session.getAttribute("nomeQualidade").toString();
	}
}
